package com.tl.spider.utils.common_utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Properties;

/**
 * properties文件读取类
 * 
 * @date 2021年7月16日
 * @author Antg
 */
public class PropertiesUtil {
	private Properties prop;

	/**
	 * 配置文件读取类的构造方法<br>
	 * 使用默认路径config.properties<br>
	 * 使用默认字符编码utf-8<br>
	 * 优先会按照路径读取项目的根目录下的配置文件<br>
	 * 如果找不到的话就读取类路径下的配置文件<br>
	 * 否则 抛出异常
	 * 
	 * @date 2021年7月16日
	 * @author Antg
	 * @throws IOException
	 */
	public PropertiesUtil() throws IOException {
		this(null);
	}

	/**
	 * 配置文件读取类的构造方法<br>
	 * 使用默认字符编码utf-8 <br>
	 * 优先会按照路径读取项目的根目录下的配置文件<br>
	 * 如果找不到的话就读取类路径下的配置文件<br>
	 * 否则 抛出异常
	 * 
	 * @param configPath
	 *            properties配置文件路径,如果空,则默认为config.properties
	 * @date 2021年7月16日
	 * @author Antg
	 * @throws IOException
	 */
	public PropertiesUtil(String configPath) throws IOException {
		this(configPath, null);
	}

	/**
	 * 配置文件读取类的构造方法<br>
	 * 优先会按照路径读取项目的根目录下的配置文件<br>
	 * 如果找不到的话就读取类路径下的配置文件<br>
	 * 否则 抛出异常
	 * 
	 * @param configPath
	 *            properties配置文件路径,如果空,则默认为config.properties
	 * @param charset
	 *            配置文件的字符编码,如果空,默认为utf-8
	 * @date 2021年7月16日
	 * @author Antg
	 * @throws IOException
	 */
	public PropertiesUtil(String configPath, String charset) throws IOException {
		if (charset == null || charset.length() == 0) {
			charset = "utf-8";
		}
		if (configPath == null || configPath.length() == 0) {
			configPath = "config.properties";
		}
		prop = new Properties();
		File file = new File(configPath);
		InputStreamReader isr = null;
		// 外部配置文件存在,首先读取外部配置文件
		if (file.exists()) {
			FileInputStream fis = new FileInputStream(file);
			isr = new InputStreamReader(fis, charset);
		} else {
			// 外部文件不存在,读取类路径
			InputStream is = PropertiesUtil.class.getClassLoader()
					.getResourceAsStream(configPath);
			isr = new InputStreamReader(is, charset);
		}
		prop.load(isr);
	}

	/**
	 * 获取配置文件中key对应的信息
	 * 
	 * @param key
	 *            要获取的value对应的key
	 * @return key对应的value
	 * @date 2021年7月16日
	 * @author Antg
	 */
	public String getValue(String key) {
		return prop.getProperty(key);
	}
}
